﻿// 10005 数列极差.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>

using namespace std;


/*
https://loj.ac/p/10005

题目描述
佳佳的老师在黑板上写了一个由 n 个正整数组成的数列，要求佳佳进行如下操作：每次擦去其中的两个数 a 和 b，
然后在数列中加入一个数 a*b+1，如此下去直至黑板上剩下一个数为止，在所有按这种操作方式最后得到的数中，
最大的为 max，最小的为 min， 则该数列的极差定义为 M=max -min。

由于佳佳忙于准备期末考试，现请你帮助他，对于给定的数列，计算出相应的极差 M。

对于全部数据，0 <= n <= 50000，保证所有数据计算均在 32 位有符号整数范围内。

输入格式
第一行为一个正整数 n 表示正整数序列的长度；
在接下来的 n 行中，每行输入一个正整数。
接下来的一行有一个 0，表示数据结束。

输出格式
输出只有一行，为相应的极差 d。

输入
3
1
2
3
0
输出
2
*/

priority_queue<int,vector<int>, less<int> > MaxHeap;
priority_queue<int,vector<int>,greater<int> > MinHeap;

const int N = 50010;
int arr[N];
int n; int t;


int maxCalc() {
	while (MaxHeap.size()>1) {
		int a = MaxHeap.top(); MaxHeap.pop();
		int b = MaxHeap.top(); MaxHeap.pop();
		int t = a * b + 1; MaxHeap.push(t);
	}

	return MaxHeap.top();
}

int minCalc() {
	while (MinHeap.size() > 1) {
		int a = MinHeap.top(); MinHeap.pop();
		int b = MinHeap.top(); MinHeap.pop();
		int t = a * b + 1; MinHeap.push(t);
	}

	return MinHeap.top();
}



int main()
{
	cin >> n;
	for (int i = 0; i < n; i++) {
		 cin >> t;
		MaxHeap.push(t);
		MinHeap.push(t);
	}
	cin >> t;
	//一个贪心从大根堆取  一个贪心从小根堆取
	int res1 = maxCalc();
	int res2 = minCalc();

	cout << res2 - res1 << endl;

	return 0;
}

 